/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Investigacion;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONObject;
import org.json.JSONArray;

/**
 *
 * @author glpc
 */
public class Investigacion_DAO {

    public static boolean insertarInvestigacion(Investigacion inv) {

        String query = "INSERT INTO investigacion "
                + "(fecha_investigacion, motivo, descripcion,id_novedad_esp, nombre_espacio, nombre_sede)"
                + " VALUES ( ?, ?, ?, ?, ?, ?)";

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date fechaInv = null;
        try {
            fechaInv = sdf.parse(inv.getFecha_investigacion());
        } catch (ParseException ex) {
            Logger.getLogger(Investigacion_DAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            s = conexion.session.prepareStatement(query);
            s.setDate(1, new java.sql.Date(fechaInv.getYear(), fechaInv.getMonth(), fechaInv.getDay()));
            s.setString(2, inv.getMotivo());
            s.setString(3, inv.getDescripcion());
            s.setInt(4, Integer.parseInt(inv.getId_novedad_esp()));
            s.setString(5, inv.getEspacio());
            s.setString(6, inv.getSede());

            int retorno = s.executeUpdate();
            System.out.println(retorno);
            return true;
        } catch (SQLException sqle) {
            System.out.println("Error Insertando Investigacion!\n" + sqle.getMessage());
            return false;
        }
    }

    public static boolean actualizarInvestigacion(Investigacion i) {

        String query = "UPDATE investigacion set fecha_investigacion = to_date(?, 'dd/mm/yyyy'),"
                + " motivo = ?, descripcion = ?, id_novedad_esp = ?, "
                + " nombre_espacio = ?, nombre_sede = ?"
                + " where id_investigacion = ? ";

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;

        try {
            s = conexion.session.prepareStatement(query);

            s.setString(1, i.getFecha_investigacion());
            s.setString(2, i.getMotivo());
            s.setString(3, i.getDescripcion());
            s.setInt(4, Integer.parseInt(i.getId_novedad_esp()));
            s.setString(5, i.getEspacio());
            s.setString(6, i.getSede());
            s.setInt(7, Integer.parseInt(i.getId_investigacion()));

            int retorno = s.executeUpdate();
            System.out.println(retorno);
            return true;
        } catch (SQLException sqle) {
            System.out.println("Error Actualizando Investigacion!\n" + sqle.getMessage());
            return false;
        }
    }

    public static JSONObject consultarInvestigacion(Investigacion inv, String novedadGenerica, String limit, String offset, String order, String asc) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        JSONObject investigaciones = new JSONObject();
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Investigacion!");
            return null;
        }

        String query = "SELECT inv.id_investigacion, to_char(inv.fecha_investigacion,'DD-MM-YYYY'), inv.motivo, "
                + "inv.descripcion, inv.nombre_espacio, inv.nombre_sede, ne.nombre_novedad_esp, "
                + "ng.nombre_novedad_gen, inv.id_novedad_esp, ne.id_novedad_gen "
                + "from investigacion inv, novedad_especifica ne, novedad_generica ng ";
        String params = "WHERE (inv.id_novedad_esp=ne.id_novedad_esp) and (ne.id_novedad_gen=ng.id_novedad_gen) ";
        if (inv.getId_investigacion() != null && !inv.getId_investigacion().equals("")) {
            params += "and inv.id_investigacion ='" + inv.getId_investigacion() + "' ";
        }
        if (inv.getFecha_investigacion() != null && !inv.getFecha_investigacion().equals("")) {
            params += "and inv.fecha_investigacion = '" + inv.getFecha_investigacion() + "' ";
        }
        if (inv.getSede() != null && !inv.getSede().equals("")) {
            params += "and inv.nombre_sede ='" + inv.getSede() + "' ";
        }
        if (inv.getEspacio() != null && !inv.getEspacio().equals("")) {
            params += "and inv.nombre_espacio ='" + inv.getEspacio() + "' ";
        }
        if (inv.getId_novedad_esp() != null && !inv.getId_novedad_esp().equals("")) {
            params += "and inv.id_novedad_esp ='" + inv.getId_novedad_esp() + "' ";
        }
        if (novedadGenerica != null && !novedadGenerica.equals("")) {
            params += "and ne.id_novedad_gen ='" + novedadGenerica + "' ";
        }

        String format = "";
        if (order != null && !order.equals("")) {
            format += " order by " + order;
            if (asc != null && !asc.equals("") && asc.equals("false")) {
                format += " desc";
            } else {
                format += " asc";
            }
        }

        if (limit != null && !limit.equals("")) {
            format += " limit " + limit;
        }
        if (offset != null && !offset.equals("")) {
            format += " offset " + offset;
        }

        try {
            rs = s.executeQuery(query + params + format);
            JSONArray ja = new JSONArray();
            int i = 0;
            while (rs.next()) {
                JSONObject investigacion = new JSONObject();
                investigacion.put("id", rs.getString(1));
                investigacion.put("fecha", rs.getString(2));
                investigacion.put("motivo", rs.getString(3));
                investigacion.put("descripcion", rs.getString(4));
                investigacion.put("espacio", rs.getString(5));
                investigacion.put("sede", rs.getString(6));
                investigacion.put("novedadEspecifica", rs.getString(7));
                investigacion.put("novedadGenerica", rs.getString(8));
                investigacion.put("idNovedadEspecifica", rs.getString(9));
                investigacion.put("idNovedadGenerica", rs.getString(10));
                ja.put(i++, investigacion);
            }
            investigaciones.put("investigaciones", ja);
            System.out.println(ja.toString());

            query = "select count(*) from investigacion inv, novedad_especifica ne, novedad_generica ng " + params;

            rs = s.executeQuery(query);
            if (rs.next()) {
                investigaciones.put("tam", rs.getString(1));
            }
            return investigaciones;
        } catch (SQLException se) {
            System.out.println("Error Consultado Investigacion!!\n" + se.getMessage());
            return investigaciones;
        } catch (Exception e) {
            System.out.println("Error obteniendo data de Investigacion\n" + e.getMessage());
            return investigaciones;
        }
    }
}
